class CyPlayer {
    /**
     * CY 播放器操作类
     * @param {Object}    options       公共配置信息
     * @param {String}    options.host  插件服务的请求地址
     * @param {String}    options.port  插件请求端口
     */
    constructor(options = {}) {
        this.options = options
        this.wsHost = options.host || 'localhost'
        this.wsPort = options.port || '8888'

        this.actionMap = {
            alarm: 'PopWnd/Alarm',
            real: 'PopWnd/OpenLive',
            title: 'PopWnd/Command',
            record: 'PopWnd/OpenPlayback',
            command: 'PopWnd/Command',
            live: 'Exec/LiveView',
            play: 'Exec/Playback',
            wall: 'Exec/AlarmWall',
            vto: 'vto/open',
            vtoRegister: 'vto/register',
            vtoRemove: 'vto/remove'
        }
    }
    createEmit(cmd, params) {
        const action = this.actionMap[cmd]
        if (!action) {
            return Promise.reject(`not has cmd: ${cmd}`)
        }
        return new Promise((resolve, reject) => {
            var ws = new WebSocket(
                `ws://${this.wsHost}:${this.wsPort}/${action}`
            )
            ws.onerror = function () {
                ws = null
                reject()
            }
            ws.onopen = function () {
                ws.send(JSON.stringify(params))
                ws.close()
                ws = null
                resolve()
            }
        })
    }

    /**
     * 播放器重载
     */
    reset(el, options = {}) {}

    /**
     * 销毁播放器
     * 关闭全部窗口，并移除监听事件，用于销毁播放器，释放内存
     */
    destroy() {}

    // rtsp 播放
    playByRtsp() {}

    /**
     * 播放实时视频
     */
    playRealVideo({ title, list }) {
        if (list.length < 1) {
            console.log('channelList 为空')
            return
        }
        // const obj = {
        //     command: 5,
        //     param: {
        //         Caption: title
        //     }
        // }
        // this.createEmit('title', obj)
        this.createEmit('real', list)
    }

    /**
     * 播放录像
     */
    playRecordVideo({ title, type, list }) {
        if (list.length < 1) {
            console.log('channelList 为空')
            return
        }
        // const obj = {
        //     command: 5,
        //     param: {
        //         Caption: title
        //     }
        // }
        // this.createEmit('title', obj)
        const recordList = list.map((item) => {
            if (type !== 1) {
                item.begin_time = ''
                item.end_time = ''
            } else {
                item.play_time = item.begin_time
            }

            return item
        })
        this.createEmit('record', recordList)
    }
    /**
     * @description 打开视频
     */
    openLiveVideo(data) {
        this.createEmit('live', data)
    }
    /**
     * @description 打开录像
     */
    openPlayBack(data) {
        this.createEmit('play', data)
    }
    /**
     * @description 打开门口机
     */
    openVto(data) {
        this.createEmit('vto', data)
    }
    /**
     * @description 注册门口机监听
     * @param {*} params
     */
    vtoRegister(params) {
        this.createEmit('vtoRegister', params)
    }
    /**
     * @description 取消门口机监听
     * @param {*} params
     */
    vtoRemove(params) {
        this.createEmit('vtoRemove', params)
    }
    /**
     * @description 报警墙
     */
    openALarmWall() {
        const obj = {
            server_ip: localStorage.getItem('serverIp'),
            server_port: localStorage.getItem('serverPort'),
            uid: localStorage.getItem('uid') || 1
        }
        this.createEmit('wall', obj)
    }
    openAlarmVideo(list) {
        // var title = {
        //     command: 5,
        //     param: {
        //         Caption: list.event_name
        //     }
        // }
        // this.createEmit('title', title)
        this.createEmit('alarm', list)
    }

    commandVideo(cmd) {
        this.createEmit('command', { command: cmd })
    }

    /**
     * 播放选中窗口的视频
     * @param {Number} index 要播放的窗口的索引，不传时当前选中的窗口开始播放
     */
    play(index) {}

    /**
     * 暂停选中窗口的视频
     * @param {Number} index 要暂停的窗口的索引，不传时当前选中的窗口暂停播放
     */
    pause(index) {}

    /**
     * 关闭选中窗口的视频
     * @param {Number} index 要关闭窗口的索引，index 不传时关闭所有窗口
     */
    close(index) {}

    /**
     * 设置全屏
     */
    setFullScreen() {}

    /**
     * 设置窗口显示模式, 自适应还是拉伸充满窗口
     * @param {String} playerAdapter [selfAdaption: 为自适应, stretching:为拉伸]
     */
    setPlayerAdapter(playerAdapter) {}

    /**
     * 设置窗口内视频是自适应还是拉伸充满窗口
     * @param {Number|String} playerAdapter [1: 自适应, 2:拉伸, selfAdaption: 自适应, stretching:拉伸]
     */
    setPlayerAdapter(playerAdapter) {}

    /**
     * 设置窗口个数
     * @param {String} number 窗口的个数, 目前可设置 1、2、3、4、6、8、9、16、25 等，该值不能超出 PlayerManager 方法的 maxNum
     */
    setPlayerNum(number) {}

    /**
     * 设置选中窗口的索引
     * @param {String} index 要设置为选中状态窗口的索引
     */
    setSelectIndex(index) {}

    /**
     * 在当前选中窗口中，跳转到指定时间节点播放录像，该时间点无录像时通过播放器的 receiveMessageFromWSPlayer 事件回调返回信息
     * @param {String} time 要跳转的时间节点，格式为 HH:mm:ss
     */
    jumpPlayByTime(time) {}

    /**
     * 在指定窗口中如果录像在播放，可设置录像回放播放倍速
     * speed 如果是 0.125、8，音频不支持播放
     * @param {Number} speed 指定窗口中如果有录像在播放，可以设置不同的倍速进行播放， 共有 0.125、0.25、0.5、1、1.25、1.5、2、4、8 等 9 种倍速
     * @param {Number} index 要设置倍速的窗口索引
     */
    playSpeed(speed, index) {}

    /**
     * 在指定窗口中，如果有录像在播放，可以进行抓图下载
     * @param {Number} index 窗口序号索引
     */
    picCap(index) {}

    /**
     * 在指定窗口中，获取 base64 格式抓图数据
     * @param {Number} index 窗口序号索引
     */
    getPicCapBase64(index) {}

    /**
     * 开启指定窗口/选中窗口的声音
     * @param {Number} [index] 窗口序号索引，不传时为当前选中的窗口索引
     */
    openVolume(index) {}

    /**
     * 关闭指定窗口/选中窗口的声音
     * @param {Number} [index] 窗口序号索引，不传时为当前选中的窗口索引
     */
    closeVolume(index) {}

    /**
     * 设置指定窗口的音频播放音量
     * @param {Number} index 窗口序号索引
     * @param {Number} volume 音量，值为 0-1 之间一位小数的浮点数如: 0.1、0.2......0.9
     */
    setVolume(index, volume) {}

    /**
     * 指定窗口开始录制本地录像，同单击视频窗口上方操作栏本地录像按钮功能一致
     * @param {Number} index 窗口序号索引
     * @param {Number} [size] 单个录像文件大小(单位 M)，不传时按实例化时配置的 localRecordSize 大小进行录制
     */
    startLocalRecord(index, size) {}

    /**
     * 指定窗口停止录制本地录像，同单击视频窗口上方操作栏本地录像按钮功能一致
     * @param {Number} index 窗口序号索引
     */
    stopLocalRecord(index) {}
}

export default CyPlayer
